/*
  需求: 在浏览器地址中，浏览指定目录，在目录下查找index.html文件，
  如果在当前层次目录中没有找到，则句许往下层目录（如果存在）中查找，直到找到为止，或者最终没有找到，返回‘很遗憾’
*/

let http = require('http')
let fs = require('fs')
let path = require('path')

let server = http.createServer((req, res) => {
    res.setHeader('content-type', 'text/html;charset=utf8')
    let url = req.url
    // 定义一个变量，接受数据
    let data
    if (url === '/favicon.ico') {
        res.end() // 返回空响应
    }
    else {
        // data 为函数返回的结果
        data = fn(__dirname + url)
    }
    res.end(data)
})

server.listen(8080, function () {
    console.log('server running at http://127.0.0.1:8080');
})

function fn(filepath) {
    // 定义一个默认值，当找不到结果时，结果就是默认值
    let result = '<h1 style="color: skyblue;">很遗憾</h1>'
    let re = result
    // 拼接路径，找寻index的路径
    let p = path.join(filepath, '/index.html')
    let filebool = fs.existsSync(p)   // 判断是否存在该文件
    if (filebool) {
        // 如果存在，直接读取数据
        result = fs.readFileSync(p)
    }
    else {
        // 先判断路径有没有该文件
        let cun = fs.existsSync(filepath)
        // 如果没有，直接返回很遗憾
        if (!cun) {
            result = re
        }
        else {
            let arr = fs.readdirSync(filepath)
            for (let item = 0; item < arr.length; item++) {
                if (result !== re) {
                    // 这里表示找到了，就直接退出
                    break
                }
                // 遍历后，因为文件已经不存在index了，所以只需要文件夹
                let ttbool = fs.statSync(path.join(filepath, arr[item])).isDirectory()
                if (ttbool) {
                    // 回调对文件夹进行层层查找
                    result = fn(path.join(filepath, arr[item]))
                }
            }
        }
    }
    return result
}